package com.mall.dubbo.api;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mall.dubbo.mappers.PmsProductCategoryAttributeRelationMapper;
import com.mall.dubbo.mappers.PmsProductCategoryMapper;
import com.tanhua.model.domain.PmsProductCategory;
import com.tanhua.model.domain.PmsProductCategoryAttributeRelation;
import com.tanhua.model.dto.ProductCategoryDto;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

@DubboService
public class PmsProductCategoryApiImpl  implements PmsProductCategoryApi {
    @Autowired
    private PmsProductCategoryMapper pmsProductCategoryMapper;

    @Autowired
    private PmsProductCategoryAttributeRelationMapper pmsProductCategoryAttributeRelationMapper;

    /**
     * 查找所有的PmsProductCategory
     * @return
     */
    @Override
    public List<PmsProductCategory> findAll() {
        return pmsProductCategoryMapper.selectList(new LambdaQueryWrapper<>());
    }

    @Override
    public Page<PmsProductCategory> findByParentId(Integer parentId, Page<PmsProductCategory> pmsProductCategoryPage) {
        LambdaQueryWrapper<PmsProductCategory> lqw = new LambdaQueryWrapper<>();
        lqw.eq(parentId != null,PmsProductCategory::getParentId,parentId);
        return pmsProductCategoryMapper.selectPage(pmsProductCategoryPage,lqw);
    }

    /**
     * 修改导航栏显示状态
     * @param ids
     * @param navStatus
     */
    @Override
    public void updateNavStatus(Integer[] ids, Integer navStatus) {
        LambdaQueryWrapper<PmsProductCategory> lqw = new LambdaQueryWrapper<>();
        lqw.in(ids != null,PmsProductCategory::getId,ids);

        PmsProductCategory pmsProductCategory = new PmsProductCategory();
        pmsProductCategory.setNavStatus(navStatus);

        pmsProductCategoryMapper.update(pmsProductCategory,lqw);

    }

    /**
     * 修改显示状态
     * @param ids   必须有值
     * @param showStatus 必须有值    0不显示  1显示
     * @return
     */
    @Override
    public void updateShowStatus(Integer[] ids, Integer showStatus) {
        LambdaQueryWrapper<PmsProductCategory> lqw = new LambdaQueryWrapper<>();
        lqw.in(ids != null,PmsProductCategory::getId,ids);

        PmsProductCategory pmsProductCategory = new PmsProductCategory();
        pmsProductCategory.setShowStatus(showStatus);

        pmsProductCategoryMapper.update(pmsProductCategory,lqw);

    }

    /**
     * 添加商品分类
     * @param productCategoryDto
     * @return
     *
     * 这个写的不一定对,后面再看
     */
    @Override
    public void create(ProductCategoryDto productCategoryDto) {

        //先存pms_product_category表
        PmsProductCategory pmsProductCategory = new PmsProductCategory();
        BeanUtils.copyProperties(productCategoryDto,pmsProductCategory);
        if (pmsProductCategory.getParentId() != 0){
            pmsProductCategory.setLevel(1);
        }else {
            pmsProductCategory.setLevel(0);
        }
        pmsProductCategoryMapper.insert(pmsProductCategory);

        //再存pms_product_category_attribute_relation表
        //这个地方写的不好,可以优化,但是没时间了
        Long categoryId = pmsProductCategory.getId();
        Integer[] productAttributeIdList = productCategoryDto.getProductAttributeIdList();
        if (productAttributeIdList != null){
            for (Integer integer : productAttributeIdList) {
                PmsProductCategoryAttributeRelation ppcar = new PmsProductCategoryAttributeRelation();
                ppcar.setProductCategoryId(categoryId);
                ppcar.setProductAttributeId(Long.valueOf(integer));
                pmsProductCategoryAttributeRelationMapper.insert(ppcar);
            }
        }

    }

    /**
     * 根据id获取商品分类
     * @param id
     * @return
     */
    @Override
    public PmsProductCategory getById(Long id) {
        return pmsProductCategoryMapper.selectById(id);
    }


    /**
     * 修改商品分类
     * @param id
     * @return
     */
    @Override
    public void updateById(Long id, ProductCategoryDto productCategoryDto) {
        //先进行修改
        PmsProductCategory pmsProductCategory = new PmsProductCategory();
        BeanUtils.copyProperties(productCategoryDto,pmsProductCategory);
        if (pmsProductCategory.getParentId()!= null && pmsProductCategory.getParentId() != 0) {
            pmsProductCategory.setLevel(1);
        } else {
            pmsProductCategory.setLevel(0);
        }
        pmsProductCategoryMapper.updateById(pmsProductCategory);


        //再根据id,将pms_product_category_attribute_relation 数据清空,重新添加
        Long categoryId = pmsProductCategory.getId();
        LambdaQueryWrapper<PmsProductCategoryAttributeRelation> lqw = new LambdaQueryWrapper<>();
        lqw.eq(categoryId != null,PmsProductCategoryAttributeRelation::getProductCategoryId,categoryId);
        pmsProductCategoryAttributeRelationMapper.delete(lqw);

        Integer[] productAttributeIdList = productCategoryDto.getProductAttributeIdList();
        if (productAttributeIdList != null){
            for (Integer integer : productAttributeIdList) {
                PmsProductCategoryAttributeRelation ppcar = new PmsProductCategoryAttributeRelation();
                ppcar.setProductCategoryId(categoryId);
                ppcar.setProductAttributeId(Long.valueOf(integer));
                pmsProductCategoryAttributeRelationMapper.insert(ppcar);
            }
        }

    }

    @Override
    public void delete(Long id) {
        pmsProductCategoryMapper.deleteById(id);
        LambdaQueryWrapper<PmsProductCategoryAttributeRelation> lqw = new LambdaQueryWrapper<>();
        lqw.eq(id != null,PmsProductCategoryAttributeRelation::getProductCategoryId,id);
        pmsProductCategoryAttributeRelationMapper.delete(lqw);
    }


}
